package design_pattern.trigger.frame;

/**
 * @version 1.0.0
 * Created by cyd on 2022-08-29 17:07:49
 * @ClassName : design_pattern.trigger.frame.ProductManager
 * @Description : 产品管理者
 * 主要用来生成一个产品相关的事件，产品就是事件源
 */
public class ProductManager {

    //是否允许创建产品的标识符
    private boolean isPermittedCreate = false;

    /**
     * 工厂方法，创建产品
     * 创建的时候，产生一个事件，事件的标签是NEW_PRODUCT
     */
    public Product createProduct(String name) {
        isPermittedCreate = true;
        Product product = new Product(this, name);
        // 产生一个创建事件：
        new ProductEvent(product, ProductEventType.NEW_PRODUCT);
        return product;
    }

    /**
     * 废弃一个产品
     **/
    public void abandonProduct(Product product) {
        //销毁一个产品，例如删除数据库记录
        //产生删除事件
        new ProductEvent(product, ProductEventType.DEL_PRODUCT);
        product = null;
    }

    /**
     * 修改一个产品
     **/
    public void editProduct(Product product, String name) {
        product.setName(name);
        //产生修改事件： 这里加入产品事件类型就是为了方便扩展
        new ProductEvent(product, ProductEventType.EDIT_PRODUCT);
    }

    /**
     * 克隆
     **/
    public Product clone(Product product) {
        try {
            new ProductEvent(product, ProductEventType.CLONE_PRODUCT);
            return (Product) product.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return null;
    }

    public boolean getCreateProduct() {
        return isPermittedCreate;
    }
}

